package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.Rito;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="ritoFaces")
@ViewScoped
public class RitoFaces extends FacesUtil {
	
	private static final long serialVersionUID = 2291565653158082656L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<Rito> logicaRito;
	
	private Rito rito = new Rito();
	private List<Rito> listaRito = new ArrayList<>();
	private String ritoBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaRito.adicionar(rito);
				adicionarMensagem("Rito adicionado com sucesso");
				this.buscarRito();
				fecharModal("dialogRito");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar o Rito");
		}
	}
	
	public void prepararAdicionar() {
		this.rito = new Rito();
		abrirModal("dialogRito");
	}
	
	public void selecionarRegistro(Long idRito, boolean editar) {
		try {
			this.rito = logicaRito.obterPorId(Rito.class, idRito);
			
			if (editar) {
				abrirModal("dialogRito");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaRito.editar(this.rito);
				adicionarMensagem("Rito editada com sucesso");
				fecharModal("dialogRito");
				this.buscarRito();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar o Rito");
		}
	}
	
	public void remover() {
		try {
			logicaRito.remover(Rito.class, this.rito.getId());
			adicionarMensagem("Rito removida com sucesso");
			fecharModal("dialogExcluir");
			this.buscarRito();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover o Rito");
		}
	}
	
	public void buscarRito() {
		if (listaRito != null) {
			this.listaRito.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(ritoBusca)) {
				this.listaRito =  logicaRito.buscarTodos(Rito.class, "rito");
			} else {
				this.listaRito = logicaRito.buscarPorCampo(Rito.class, "rito", ritoBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.rito.getRito())) {
			adicionarMensagem("O campo rito é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaRito(DefaultLogicaContract<Rito> logicaRito) {
		this.logicaRito = logicaRito;
	}

	public List<Rito> getListaRito() {
		return listaRito;
	}

	public void setListaRito(List<Rito> listaRito) {
		this.listaRito = listaRito;
	}

	public String getRitoBusca() {
		return ritoBusca;
	}

	public void setRitoBusca(String RitoBusca) {
		this.ritoBusca = RitoBusca;
	}

	public Rito getRito() {
		return rito;
	}

	public void setRito(Rito Rito) {
		this.rito = Rito;
	}
	
	
}